#ifndef RULES_H
#define RULES_H
#include <string>

/**
 * Règle 1 : caractères composant la clé
 * @param type Type de la clé (LK=true, 0~=false)
 * @return Charset de la clé
 */
std::string rule1(bool type);

/**
 * Règle 2 : 23eme caractère toujours un chiffre pour les LK
 * @param type Type de la clé (LK=true, 0~=false)
 * @param seed Seed de la fonction rand_r
 * @return Caractère à la position 23
 */
char rule2(bool type, unsigned int *seed);

/**
 * Règle 3 : somme des chiffres entre 30 et 104
 * @param key clé
 * @return true : règle respectée
 */
bool rule3(std::string key);

/**
 * Règle 4 : somme des chiffres et des lettres (hexadécimal) entre 150 et 260
 * @param key clé
 * @return true = règle respectée
 */
bool rule4(std::string key);

/**
 * Règle 5 : Pas plus de 6 lettres consécutives.
 * @param key clé
 * @return true = règle respectée
 */
bool rule5(std::string key);

/**
 * Règle 6 : Pas plus de 12 chiffres consécutifs.
 * @param key clé
 * @return true = règle respectée
 */
bool rule6(std::string key);

/**
 * Règle 7 : Entre 5 et 13 lettres au total.
 * @param key clé
 * @return true = règle respectée
 */
bool rule7(std::string key);

/**
 * Règle 8 : Pas plus de 8 fois le même caractère dans la clé.
 * @param key clé
 * @param type_cle Type de la clé (LK=true, 0~=false)
 * @return true = règle respectée
 */
bool rule8(std::string key, bool type_cle);

/**
 * Règle 9 : Pas plus de 4 fois le même caractère consécutif dans la clé.
 * @param key clé
 * @param type_cle Type de la clé (LK=true, 0~=false)
 * @return true = règle respectée
 */
bool rule9(std::string key, bool type_cle);

/**
 * Règle 10 : Priorités chiffre/lettre
 * @param key clé
 * @param iter Nombre de clés déja générées
 * @param seed Seed de la fonction rand_r
 * @return true = règle respectée
 */
std::string rule10(std::string key, unsigned long int iter, unsigned int *seed);

int rule_essid(unsigned long int essid_dec);
#endif	/* RULES_H */

